package com.ruoyi.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.domain.BdmOrderItem;
import com.ruoyi.system.domain.dto.BdmGoodDto;
import com.ruoyi.system.domain.vo.BdmOrderItemVo;
import com.ruoyi.system.domain.vo.applet.AppletOrderItemVo;
import com.ruoyi.system.domain.vo.applet.AppletRemainToBeEvaluated;

import java.util.List;

/**
 * 订单项目Service接口
 * 
 * @author ruoyi
 * @date 2024-12-13
 */
public interface IBdmOrderItemService  extends IService<BdmOrderItem>
{
    /**
     * 查询订单项目
     * 
     * @param id 订单项目主键
     * @return 订单项目
     */
    public BdmOrderItem selectBdmOrderItemById(Long id);

    /**
     * 搜索订单商品列表
     * @param orderIds
     * @return
     */
    List<AppletOrderItemVo> selectBdmOrderItemByIds(List<String> orderIds);

    /**
     * 查询订单项目列表
     * 
     * @param bdmOrderItem 订单项目
     * @return 订单项目集合
     */
    public List<BdmOrderItem> selectBdmOrderItemList(BdmOrderItem bdmOrderItem);

    /**
     * 新增订单项目
     * 
     * @param bdmOrderItem 订单项目
     * @return 结果
     */
    public int insertBdmOrderItem(BdmOrderItem bdmOrderItem);

    /**
     * 修改订单项目
     * 
     * @param bdmOrderItem 订单项目
     * @return 结果
     */
    public int updateBdmOrderItem(BdmOrderItem bdmOrderItem);

    /**
     * 批量删除订单项目
     * 
     * @param ids 需要删除的订单项目主键集合
     * @return 结果
     */
    public int deleteBdmOrderItemByIds(Long[] ids);

    /**
     * 删除订单项目信息
     * 
     * @param id 订单项目主键
     * @return 结果
     */
    public int deleteBdmOrderItemById(Long id);

    /**
     * 查询 云库存商品
     */
    List<BdmGoodDto> selectGoodItemList(List<Long> orderItemIds);

    /**
     * 查询未评价订单项
     */
    List<AppletRemainToBeEvaluated> remainToBeEvaluated();

    /**
     * 查询订单项列表
     */
    List<BdmOrderItemVo> getBdmOrderItems(String orderId);

    /**
     * 根据订单项退款
     */
    void refund(List<BdmOrderItem> bdmOrderItems, Long payType,Long userId);

    /**
     * 直接退款
     * @param bdmOrderItems
     * @param payType
     * @param userId
     */
    void refundOrder(List<BdmOrderItem> bdmOrderItems, Long payType, Long userId);
}
